package bridgePattern

/**
 * 桥梁模式:将抽象和实现解耦,使得两者可以独立的变化.
 *
 * 抽象和实现分离是桥梁模式的主要特点,是为了解决继承的缺点而提出的设计模式,在该模式下,实现可以不受抽象的约束,
 * 不用绑定在一个固定的抽象层次上.
 *
 * 实现对客户透明,客户端不用关心细节的实现,它已经有抽象层通过聚合关系完成了封装.
 *
 * 实例,使用多种颜色画多种图形,可以定义不同的图形类,和一些颜色类(颜色其实是图形的属性,但是被单独抽象出来),这样就可以把图形和颜色任意的组合.
 * 如果不使用桥梁模式去实现的话,每种颜色的每种图形生成一个类显然会让程序变得更复杂.
 *
 */
fun main() {
    val circle = Circle(Red())
    circle.draw()

    val square = Square(Blue())
    square.draw()
}